package com.ruoyi.common.core.redis;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Set;
import java.util.concurrent.TimeUnit;

@Component
public class RedisSetCache {

    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    /**
     * 向Set集合添加元素
     * @param key 键
     * @param value 值
     * @return 添加成功的元素数量
     */
    public Long addSetValue(String key, Object value) {
        return redisTemplate.opsForSet().add(key, value);
    }

    /**
     * 向Set集合添加多个元素
     * @param key 键
     * @param values 值
     * @return 添加成功的元素数量
     */
    public Long addSetValues(String key, Object... values) {
        return redisTemplate.opsForSet().add(key, values);
    }

    /**
     * 从Set集合移除元素
     * @param key 键
     * @param value 值
     * @return 移除的元素数量
     */
    public Long removeSetValue(String key, Object value) {
        return redisTemplate.opsForSet().remove(key, value);
    }

    /**
     * 获取Set集合的所有元素
     * @param key 键
     * @return Set集合
     */
    public Set<Object> getSet(String key) {
        return redisTemplate.opsForSet().members(key);
    }

    /**
     * 判断元素是否在Set集合中
     * @param key 键
     * @param value 值
     * @return 是否存在
     */
    public Boolean isSetMember(String key, Object value) {
        return redisTemplate.opsForSet().isMember(key, value);
    }

    /**
     * 设置Set集合的过期时间
     * @param key 键
     * @param timeout 时间
     * @param unit 时间单位
     * @return 是否成功
     */
    public Boolean expireSet(String key, long timeout, TimeUnit unit) {
        return redisTemplate.expire(key, timeout, unit);
    }
}
